package zsc.ruanc.practicaltraining.utils;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import zsc.ruanc.practicaltraining.exception.ApiException;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * 上传工具类
 */
public class UploadUtils {

    private static int SIZE = 20 * 1024 *1024;

    private static int IMG_SIZE = 5 * 1024 *1024;

    /**
     *
     * @param file
     * @param path 路径
     * @param name 文件名
     * @param type true代表上传图片 false代表普通文件
     * @return 返回文件名 name为空返回随机的文件名
     */
    public static String save(MultipartFile file, String path, String name, boolean type) {

        if (file == null) {
            throw  new ApiException(-12, "文件为空");
        }

        if (file.isEmpty()) {
            throw  new ApiException(-12, "文件为空");
        }

        if (file.getSize() > SIZE) {
            throw new ApiException(-12, "文件大小超过限制(不得大于20MB)");
        }

        // 文件名
        String filename = file.getOriginalFilename();
        // 后缀名
        int x = filename.lastIndexOf('.');

        String suffix = x == -1 ? "" : filename.substring(x);
        suffix = suffix.toLowerCase(); // 转为小写

        if (type) {
            if (!suffix.equals(".jpg") && !suffix.equals(".jpeg") && !suffix.equals(".png") && !suffix.equals(".gif")) {
                throw new ApiException(-12, "文件格式应为jpg,jpeg,png,gif");
            }
        }

        // 新文件名
        String newname = null;

        if (name == null) {
            newname = UUID.randomUUID().toString() + suffix;
        } else {
            newname = name;
        }

        File dir = new File(path);
        if (!dir.exists()) {
            dir.mkdirs();
        }

        try {
            file.transferTo(new File(path + newname));
        } catch (IOException e) {
            throw new ApiException(-12, "文件传输失败");
        }

        return newname;
    }

    /**
     * 保存普通文件
     * @param file
     * @param path 路径
     * @return 返回文件名
     */
    public static String save(MultipartFile file, String path) {
        return save(file, path, null, false);
    }

    /**
     * 保存图片
     * @param file
     * @param path
     * @return
     */
    public static String saveImg(MultipartFile file, String path) {
        return save(file, path, null, true);
    }





}
